package com.cgwx.tcservice.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.cgwx.tcservice.entity.tc.TcParameterConfig;
import com.cgwx.tcservice.entity.vo.TcParameterExcelVo;
import com.cgwx.tcservice.service.TcParameterConfigService;
import io.swagger.annotations.Api;
import org.springframework.beans.BeanUtils;

import java.util.Map;

/**
 * @author GaoWei
 * @Date 2023/8/8 - 16:25
 */

@Api(tags = "EasyExcel遥控表格读取监听器")
public class TcParameterExcelListener extends AnalysisEventListener<TcParameterExcelVo> {
//    不可以交给Spring进行管理，需要自己new，不能注入其他对象
    public TcParameterConfigService tcParameterConfigService;
    private String tcFrameIdentifiers;
    private Map<String, String> sheetToTcCommandCode;

//    构造函数
    public TcParameterExcelListener() {
    }

    public TcParameterExcelListener(TcParameterConfigService tcParameterConfigService, String tcFrameIdentifiers, Map<String, String> sheetToTcCommandCode) {
        this.tcParameterConfigService = tcParameterConfigService;
        this.tcFrameIdentifiers = tcFrameIdentifiers;
        this.sheetToTcCommandCode = sheetToTcCommandCode;
    }

//    读取Excel中的内容
    @Override
    public void invoke(TcParameterExcelVo tcParameterExcelVo, AnalysisContext analysisContext) {
//        创建对象，用于数据库存储
        TcParameterConfig tcParameterConfig = new TcParameterConfig();
//        赋值遥控帧代号
        tcParameterConfig.setTcFrameIdentifiers(tcFrameIdentifiers);
//        赋值遥控指令代号
        String tcCommandCode = sheetToTcCommandCode.get(analysisContext.readSheetHolder().getSheetNo().toString());
        tcParameterConfig.setTcCommandCode(tcCommandCode);
//        赋值遥控参数内容
        BeanUtils.copyProperties(tcParameterExcelVo,tcParameterConfig);
//        赋值tc_parameter_value_D字段
//        处理方式为固定值时，给此字段赋值，其他字段为null
//        处理方式为前校验和/后校验和时，给此字段赋值，其他字段为null
        if(tcParameterConfig.getTcParameterMode() == 1 || tcParameterConfig.getTcParameterType() == 4 || tcParameterConfig.getTcParameterType() == 5){
            tcParameterConfig.setTcParameterValueD(tcParameterExcelVo.getTcHandleParam());
        }
//        存储数据库
        tcParameterConfigService.save(tcParameterConfig);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}
